package io.github.wslxm.springbootplus2.manage.sys.service;


import com.baomidou.mybatisplus.extension.service.IService;
import io.github.wslxm.springbootplus2.core.base.model.BasePage;
import io.github.wslxm.springbootplus2.manage.sys.model.dto.SysMsgDTO;
import io.github.wslxm.springbootplus2.manage.sys.model.entity.SysMsg;
import io.github.wslxm.springbootplus2.manage.sys.model.query.SysMsgQuery;
import io.github.wslxm.springbootplus2.manage.sys.model.vo.SysMsgVO;
import io.github.wslxm.springbootplus2.manage.sys.model.vo.next.SysMsgFindAllNumVO;

import java.util.List;
import java.util.Map;

/**
 * 订单-->及时消息通知表
 * <p>
 * ::本代码由[兮家小二]提供的代码生成器生成,如有问题,请手动修改 ::作者CSDN:https://blog.csdn.net/qq_41463655
 * </p>
 *
 * @author wangsong
 * @email 1720696548@qq.com
 * @date 2020-09-23 10:40:23
 */
public interface SysMsgService extends IService<SysMsg> {


    /**
     * 列表查询
     *
     * @param query query
     * @return com.baomidou.mybatisplus.core.metadata.BasePage<io.github.wslxm.springbootplus2.manage.xj.model.vo.MsgVO>
     * @version 1.0.0
     */
    BasePage<SysMsgVO> findPage(SysMsgQuery query);


    /**
     * 添加/发送消息（如果需要的端webSocket已连接，同时发送webSocket信息）
     *
     * @param dto dto
     * @return java.lang.String
     * @version 1.0.0
     */
    String insert(SysMsgDTO dto);


    /**
     * 修改信息为已读
     *
     * @param id id
     * @return boolean
     * @version 1.0.0
     */
    boolean updRead(String id);

    /**
     * 将当前登录用户的消息修改为全部已读
     *
     * @return
     */
    boolean updReadByIds(List<String> ids);

    /**
     * 将当前登录用户的消息修改为全部已读
     *
     * @return
     */
    boolean readAll();

    /**
     * 查询未读消息数量
     *
     * @return java.lang.Integer
     * @version 1.0.0
     */
    Long findUnreadNum();


    /**
     * 查询已读/未读数量
     *
     * @return io.github.wslxm.springbootplus2.manage.xj.model.vo.MsgFindAllNumVO
     * @version 1.0.0
     */
    SysMsgFindAllNumVO findAllNum();
    /**
     * 发送系统用户信息消息
     *
     * @param userId  用户id
     * @param content 内容
     * @return boolean
     * @param1 isWebsocket 是否同时发送 websocket 消息 (sendSysUserMsg 默认推送,sendClientUserMsg 一律不推送)
     * @param2 msgType 自定义消息类型
     * @param3 routeParams 路由参数
     */
    boolean sendSysUserMsg(String userId, String content);

    boolean sendSysUserMsg(String userId, String content, boolean isWebsocket);

    boolean sendSysUserMsg(String userId, String content, boolean isWebsocket, Integer msgType);

    boolean sendSysUserMsg(String userId, String content, boolean isWebsocket, Integer msgType, Map<String, String> routeParams);

    boolean sendClientUserMsg(String userId, String content);

    boolean sendClientUserMsg(String userId, String content, Integer msgType);

    boolean sendClientUserMsg(String userId, String content, Integer msgType, Map<String, String> routeParams);

}

